/**
 * 主题服务 - 处理系统主题的切换和初始化
 */
import { Theme_Variable, DEFAULT_THEME } from '@/constants/theme';
import { eventBus } from '@/service/eventService'
import { isPC } from './deviceUtils.js';

// 避免循环依赖，使用动态导入

/**
 * 应用主题变量到根元素
 * @param {string} themeName - 主题名称
 */
function applyThemeVariables (themeName) {
    if (!themeName) {
        themeName = DEFAULT_THEME;
    }

    const themeVariables = Theme_Variable[themeName];
    if (!themeVariables) {
        console.warn(`主题 ${themeName} 不存在，使用默认主题`);
        return;
    }

    // 获取根元素
    const root = document.documentElement;

    root.dataset.theme = themeName;

    // 应用主题变量
    Object.entries(themeVariables).forEach(([key, value]) => {
        root.style.setProperty(key, value);
    });

    console.log(`已应用主题: ${themeName}`);
}

/**
 * 向iframe发送主题变更消息
 */
function notifyIframesThemeChange () {
    const getCSSVar = (varName) => getComputedStyle(document.documentElement).getPropertyValue(varName);

    const themeData = {
        Color: getCSSVar("--theme-color"),
        ColorHover: getCSSVar("--theme-color-hover"),
        ColorBackground: getCSSVar("--theme-color-background"),
        ColorFocus: getCSSVar("--theme-color-choose"),
        ColorBase: getCSSVar("--theme-color-base"),
        ColorGradient: getCSSVar("--theme-menu-gradient")
    };

    const cookieExpiry = 1000 * 60 * 60 * 24 * 30; // 30天
    const themeDataString = JSON.stringify(themeData);

    TFF.common.storage.Cookie.create(`Frame_ThemeColor`, themeDataString, cookieExpiry);
    TFF.common.storage.Cookie.create(`wrp_systemTheme`, themeDataString, cookieExpiry);

    // 向iframe发送主题变更消息
    const iframes = document.querySelectorAll('iframe');
    iframes.forEach(iframe => {
        try {
            iframe.contentWindow.postMessage({
                type: "USER_SKIN_CHANGE",
                ThemeColor: themeData
            }, '*');
        } catch (error) {
        }
    });
}

/**
 * 切换系统主题
 * @param {string} themeName - 主题名称
 * @param {boolean} saveToStorage - 是否保存到存储中，默认为true
 */
async function changeTheme (themeName, saveToStorage = true) {
    // 应用主题变量
    applyThemeVariables(themeName);

    // 保存主题设置到存储
    if (saveToStorage) {
        // 动态导入userProfileService，避免循环依赖
        const userProfileService = await import('@/service/userProfileService');
        userProfileService.saveUserProfile('wrp_theme', themeName);
    }

    // 通知iframe主题变更
    notifyIframesThemeChange();
}

/**
 * 初始化系统主题
 * 从用户配置中获取主题设置，如果没有则使用默认主题
 */
async function initTheme () {
    try {
        // 动态导入userProfileService，避免循环依赖
        const userProfileService = await import('@/service/userProfileService');
        // 使用userProfileService获取主题设置
        let themeName = userProfileService.getUserProfile('wrp_theme');
        
        // 应用主题，但不再保存到存储
        themeName = isPC() ? themeName : 'white';
        await changeTheme(themeName || DEFAULT_THEME, false);
    } catch (error) {
        console.error('初始化主题失败:', error);
        // 出错时使用默认主题
        applyThemeVariables(DEFAULT_THEME);
    }
}

export {
    changeTheme,
    initTheme,
    notifyIframesThemeChange
};